Skip to content

Conversation

@petk
Copy link
Member

@petk petk commented Nov 16, 2025

As much as I dislike adding another global include flag to php-config script or to install even more headers, this is now needed to fix then also, I believe.

Changes in the PR:

  • Currently, ext/uri API is designed in a way that no 3rd party uriparser headers are needed to use ext/uri headers in some other extension.

  • ext/lexbor now also installs all 3rd party ext/lexbor/lexbor headers. They are currently needed by ext/dom and ext/uri.

  • Added lexbor include flag to php-config script.

  • The ext/uri/uriparser/include can be (currently) only specified for the ext/uri sources and not globally for all other extensions.

  • Creating redundant ext/lexbor/lexbor/css/tokenizer directory at configure step removed (this was probably used in some older lexbor version).


In the future it would be much cooler to go similar to how the ext/pcre/pcre2lib is done regarding the headers. Or in current case, how the ext/uri is done - like a perfect example of using 3rd party library, having it bundled (optionally) but no uriparser headers need to be installed to use PHP C API.

BTW, to use PHP, a list of all include flags is getting extremely long. This is completely redundant I believe and could be simplified to only includes="-I$include_dir" at some point if there is some goal to have a nice PHP C API:

includes="-I$include_dir -I$include_dir/main -I$include_dir/TSRM -I$include_dir/Zend -I$include_dir/ext -I$include_dir/ext/date/lib -I$include_dir/ext/lexbor"

Edit: This is done now only due to the ext/uri/uri_parser_whatwg.h which includes the lexbor/url/url.h and this is a public header. If this header could be somehow refactored, then ext/lexbor include flag could be most likely removed from the php-config scripts. So only ext/dom has customly could have an -Iext/lexbor flag.

- Currently, ext/uri API is designed in a way that no 3rd party
  uriparser headers are needed to use ext/uri headers in some other
  extension.

- ext/lexbor now also installs all 3rd party ext/lexbor/lexbor headers.
  They are currently needed by ext/dom and ext/uri.

- Added lexbor include flag to php-config script.

- The ext/uri/uriparser/include can be (currently) only specified for
  the ext/uri sources and not globally for all other extensions.

- Creating redundant ext/lexbor/lexbor/css/tokenizer directory at
  configure step removed (this was probably used in some older lexbor
  version).
@kocsismate
Copy link
Member

LGTM, although I can barely do a meaningful assessment. cc @TimWolla

@TimWolla
Copy link
Member

I can't meaningfully comment on this either and trust your autoconf knowledge on this. However I believe this is too late for PHP 8.5 / just a cleanup, not a bugfix, no?

@TimWolla
Copy link
Member

This is done now only due to the ext/uri/uri_parser_whatwg.h which includes the lexbor/url/url.h and this is a public header.

For this I agree it would make sense to make the return type of php_uri_parser_whatwg_parse_ex opaque like like for rfc3986. If folks want to use Lexbor directly, they can do so.

@petk
Copy link
Member Author

petk commented Nov 20, 2025

Yes, this is a bugfix for PHP 8.5:

cd ext/dom
phpize
./configure
make

And to enable creating a PHP extension which will use the ext/uri/uri_parser_whatwg.h header.

@petk
Copy link
Member Author

petk commented Nov 20, 2025

For this I agree it would make sense to make the return type of php_uri_parser_whatwg_parse_ex opaque like like for rfc3986. If folks want to use Lexbor directly, they can do so.

Can this be done for PHP 8.5? Then this PR can be also modified and simplified. Because adding -Iext/lexbor include flag would be best to avoid for now then.

@TimWolla
Copy link
Member

Can this be done for PHP 8.5

No. That would be an API change which definitely is unacceptable after the release. But forward-declaring the lxb_url_t typedef should work and then with 8.6 the return type could be made opaque.

@petk
Copy link
Member Author

petk commented Nov 20, 2025

Let's simplify this a bit then and I'll remove those -I changes. If someone will already create a PHP extension which will use ext/uri headers, they can add the -Iext/lexbor manually in the config.{m4,w32} for PHP-8.5 like it's done in ext/dom and ext/uri now in PHP-8.5 branch. Adding new global include flags to php-config on both build systems is definitely something that I'd avoid here. And in PHP-8.6 we'll change it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants